#ifndef __CALLBACK_PUBLIC_HPP__
#define __CALLBACK_PUBLIC_HPP__

#include "../../private/queue.hpp"
#include "../../private/service.hpp"
#include "../../private/sml.hpp"
#include "../../private/zevent_sml.hpp"
#include <concepts>
#include <type_traits>

/// \brief Macro to define event types, creating structs that inherit from
/// Service \param type_name Name of the event type \param ... Optional
/// additional parameters for Service template arguments
#define ZEVT_TYPE(type_name, ...)                                              \
  struct type_name                                                             \
      : public ::callback::internal::Service<type_name __VA_OPT__(, )          \
                                                 __VA_ARGS__> {};

#endif // !__CALLBACK_PUBLIC_HPP__